#include "app_common.h"
#include "pthread.h"

int a = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *fun(void *args)
{
    for (int i = 0; i < 2000; i++)
    {
        // 解决竞态问题: 使用互斥锁
        pthread_mutex_lock(&mutex);   // 加锁
        a++;                          // 不是原子操作 产生竞态问题
        pthread_mutex_unlock(&mutex); // 解锁
        // 1. 读取a的值 2. 计算 3. 计算结果赋值
    }
}

int main(int argc, char const *argv[])
{
    pthread_t ids[10];
    for (size_t i = 0; i < 10; i++)
    {
        pthread_create(&ids[i], NULL, fun, NULL);
    }
    for (size_t i = 0; i < 10; i++)
    {
        pthread_join(ids[i], NULL);
    }

    log_info("a = %d", a);

    return 0;
}
/*
线程退出:
    1. 现在函数执行完毕,自动退出
    2. 线程内部调用 pthread_exit()
    3. 线程外部调用 pthread_cancel()


*/
